/**
 * 索引查找
 *      算法思想：
 *          1：通过数据的关键字特征，将数据分成一块块的数据
 *              然后通过 关键字 + 下标地址 将 所有的块 建立起索引表
 *          2：先查找索引表，确定 数据处于哪一块种，然后获取对应块的 下标地址
 *              再通过顺序查找对块内的元素进行一一查找
 *      
 * @param {*} val 
 */

var data = [2, 5, 7, 9, 20, 11, 16, 30, 49, 32, 38, 50]

class Index {
    constructor (key, index) {
        this.key = key
        this.index = index
    }
}

const indexList = new Array()
indexList.push(
    new Index(9, 0)
)
indexList.push(
    new Index(30, 4)
)
indexList.push(
    new Index(50, 8)
)

function indexSearch (list, val) {
    let i = 0,j
    while (indexList[i].key < val && i < indexList.length - 1)  i++
    if (i > indexList.length) return false
    j = indexList[i].index
    while (list[j] !== val && j < indexList[i].index + 5) {
        j++
    }
    if (val === list[j]) {
        return j
    } else {
        return false
    }
}

console.log(indexSearch(data, 100))